import axios from 'axios'
import router from "../router";

// axios通用配置
axios.defaults.timeout = 10000;
axios.defaults.baseURL = "/api";
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
axios.defaults.transformRequest = [function (data) {
    let ret = '';
    for (let it in data) {
        // noinspection JSUnfilteredForInLoop
        ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
    }
    return ret
}];

axios.interceptors.response.use(
    res => {
        if (res.status === 200) {
            console.log(res.data);
            if (res.data.status === 2) {
                // 登录过期，回到登录界面
                router.replace({path: '/'});
            }
            return Promise.resolve(res);
        } else {
            return Promise.reject(res);
        }
    },
    // 服务器状态码不是200的情况
    error => {
        console.log(error);
        switch (error.response.status) {
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径,在登录成功后返回当前页面，这一步需要在登录页操作。
            case 401:
                router.replace({path: '/'});
                break;
            case 404:
                this.$alert('网络请求出错');
                break;
            case 500:
                this.$alert('服务器出错');
                break;
        }
        return Promise.reject(error.response);
    }
);

/**
 * axios get请求
 * @param url 请求url
 * @param params 请求参数
 */
export function get(url, params) {
    return new Promise(((resolve, reject) => {
        axios.get(url, {params: params}).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    }))
}

/**
 * axios post请求
 * @param url 请求url
 * @param params 请求参数
 */
export function post(url, params) {
    return new Promise(((resolve, reject) => {
        axios.post(url, params).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    }))
}

/**
 * axios put请求
 * @param url 请求url
 * @param params 请求参数
 */
export function put(url, params) {
    return new Promise(((resolve, reject) => {
        axios.put(url, params).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    }))
}

/**
 * axios delete请求
 * @param url 请求url
 * @param params 请求参数
 */
export function deleteReq(url, params) {
    return new Promise(((resolve, reject) => {
        axios.delete(url, {params: params}).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    }))
}
